package pruebas.testDesplazadores;

import org.junit.*;

import static org.junit.Assert.*;
import modelo.Movil;
import modelo.desplazadores.DesplazadorBuscador;
import modelo.naves.Avioneta;
import modelo.util.Vector;

public class TestDesplazadorBuscador {

	private Vector pos1 = new Vector(0,1);
	private Vector pos2 = new Vector(-6,6);
	private Vector dir1 = new Vector(0,1);
	private Vector dir2 = new Vector(-1,-1);
	private float velocidad = 1;
	private float distancia, distNueva;
	private Movil unMovil;
	private DesplazadorBuscador desp1, desp2;
	
	@Before
	public void setUp(){
		unMovil = new Avioneta(pos2, dir1);
		desp1 = new DesplazadorBuscador(pos1, dir1, velocidad, unMovil);
		desp2 = new DesplazadorBuscador(pos1, dir2, velocidad, unMovil);
		distancia = pos1.distancia(pos2);
	};

	@Test
	public void testMover(){
		desp1.mover();
		distNueva = desp1.getPosicion().distancia(pos2);
		assertTrue ("Se esta acercando al movil", distNueva < distancia);
		distancia = distNueva;
		
		desp1.mover(); desp1.mover(); desp1.mover(); desp1.mover(); desp1.mover();
		distNueva = desp1.getPosicion().distancia(pos2);
		assertTrue ("Se esta acercando al movil", distNueva < distancia);
		distancia = distNueva;	
		
		
		desp2.mover();
		distNueva = desp2.getPosicion().distancia(pos2);
		assertTrue ("Se esta alejando del movil por falta de rotacion", distNueva > distancia);
		distancia = distNueva;
		
		desp2.mover(); desp2.mover(); desp2.mover(); desp2.mover(); desp2.mover();
		desp2.mover(); desp2.mover(); desp2.mover(); desp2.mover(); desp2.mover();
		distNueva = desp1.getPosicion().distancia(pos2);
		assertTrue ("Se esta acercando al movil", distNueva < distancia);
		distancia = distNueva;		
	};
	
	@Test
	public void testRetroceder(){
		desp1.retroceder();
		desp2.retroceder();
		
		desp1.mover();
		distNueva = desp1.getPosicion().distancia(pos2);
		assertTrue ("Se esta alejando del movil", distNueva > distancia);
		distancia = distNueva;
		
		desp1.mover(); desp1.mover(); desp1.mover(); desp1.mover(); desp1.mover();
		distNueva = desp1.getPosicion().distancia(pos2);
		assertTrue ("Se esta alejando del movil", distNueva > distancia);
		distancia = distNueva;	
		
		
		desp2.mover();
		distNueva = desp2.getPosicion().distancia(pos2);
		assertTrue ("Se esta acercando al movil por falta de rotacion", distNueva < distancia);
		distancia = distNueva;
		
		desp2.mover(); desp2.mover(); desp2.mover(); desp2.mover(); desp2.mover();
		desp2.mover(); desp2.mover(); desp2.mover(); desp2.mover(); desp2.mover();
		distNueva = desp1.getPosicion().distancia(pos2);
		assertTrue ("Se esta alejando del movil", distNueva > distancia);
		distancia = distNueva;		
	}

}
